package com.ayh.campusfun.common.dao;


import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 基础数据库访问层
 *
 * @author ayh
 * @since 2021-03-23 10:08:47
 */
@Repository
public interface BaseDao<T> {

    /**
     * 保存对象
     *
     * @param t
     * @return id
     */
    Long insert(T t);

    /**
     * 批量保存对象
     *
     * @param entities
     * @return 对象数组
     */
    List<T> insertBatch(@Param("entities") List<T> entities);

    /**
     * 批量保存对象或修改对象
     *
     * @return 对象数组
     */
    List<T> insertOrUpdateBatch();

    /**
     * 根据主键修改数据层
     *
     * @param t
     * @return 受影响行数
     */
    Long updateById(T t);

    /**
     * 批量修改数据
     *
     * @param entities
     * @return 受影响行数
     */
    Long updateBatch(@Param("entities") List<T> entities);

    /**
     * 查询所有数据
     *
     * @return 对象数组
     */
    List<T> findAll();

    /**
     * 通过参数返回对象数组
     *
     * @param map
     * @return 对象数组
     */
    List<T> findListByParam(Map<String, Object> map);

    /**
     * 通过id查询对象
     *
     * @param id
     * @return 对象数组
     */
    T findById(Long id);

    /**
     * 通过参数查找
     *
     * @param map
     * @return
     */
    T findByParam(Map<String, Object> map);

    /**
     * 通过参数统计数量
     *
     * @param map
     * @return 统计数量
     */
    Long getCountByParam(Map<String, Object> map);

    /**
     * 统计所有数量
     *
     * @return 统计数量
     */
    Long getCount();

    /**
     * 通过参数删除数据
     *
     * @param id
     * @return 受影响行数
     */
    Long deleteById(Long id);

    /**
     * 通过参数删除数据
     *
     * @param map
     * @return 受影响行数
     */
    Long deleteByParam(Map<String, Object> map);

    /**
     * 通过id数组删除数据
     *
     * @param ids
     * @return 受影响行数
     */
    Long deleteByIds(Long... ids);
}
